package com.ruoyi.canteen.service;

import java.util.List;
import com.ruoyi.canteen.domain.CanteenCpOrder;
import com.ruoyi.canteen.vo.CanteenOrderVo;
import com.ruoyi.canteen.vo.OrderResultVo;
import com.ruoyi.canteen.vo.OrderShowVo;
import com.ruoyi.common.core.page.PageDomain;

/**
 * 主订单Service接口
 * 
 * @author zhangw
 * @date 2021-09-19
 */
public interface ICanteenCpOrderService 
{
    /**
     * 查询主订单
     * 
     * @param id 主订单主键
     * @return 主订单
     */
    public CanteenCpOrder selectCanteenCpOrderById(Long id);

    /**
     * 查询主订单列表
     * 
     * @param canteenCpOrder 主订单
     * @return 主订单集合
     */
    public List<CanteenCpOrder> selectCanteenCpOrderList(CanteenCpOrder canteenCpOrder);


    public List<CanteenCpOrder> selectCanteenCpOrderList1to1(CanteenCpOrder canteenCpOrder, PageDomain pageDomain);


    /**
     * 新增主订单
     * 
     * @param canteenCpOrder 主订单
     * @return 结果
     */
    public int insertCanteenCpOrder(CanteenCpOrder canteenCpOrder);

    /**
     * 修改主订单
     * 
     * @param canteenCpOrder 主订单
     * @return 结果
     */
    public int updateCanteenCpOrder(CanteenCpOrder canteenCpOrder);

    /**
     * 批量删除主订单
     * 
     * @param ids 需要删除的主订单主键集合
     * @return 结果
     */
    public int deleteCanteenCpOrderByIds(Long[] ids);

    /**
     * 删除主订单信息
     * 
     * @param id 主订单主键
     * @return 结果
     */
    public int deleteCanteenCpOrderById(Long id);

    /**
     * 新增主订单+订单明细
     * @param canteenOrderVo
     * @return
     */
    public CanteenCpOrder newCanteenCpOrder(CanteenOrderVo canteenOrderVo);

    public OrderResultVo convertCpOrderToVo(CanteenCpOrder mainOrder);

    /**
     * 查询当前用户的订单列表
     * @param userId 当前用户
     * @return
     */
    public List<OrderShowVo> selectOrderShowVoList(Long userId,String payFlag);

    /**
     * 查询当前用户的主订单
     * @param userId
     * @param orderId
     * @return
     */
    public OrderShowVo selectOrderShowVo(Long userId, Long orderId);

    /**
     * 根据ID查询当前主订单(包含商户号)
     * @param orderId
     * @return
     */
    public OrderShowVo selectOrderShowByOrderId(Long orderId);

    /**
     * 根据用户id + 订单id 更新订单支付状态
     * @param userId
     * @param orderId
     * @return
     */
    public int confirmPayById(Long userId,Long orderId);

    /**
     * 根据用户id + 订单NO 更新订单支付状态
     * @param userId
     * @param orderNo
     * @return
     */
    public int confirmPayByNo(Long userId, String orderNo);

    /**
     * 根据用户openid + 订单NO 更新订单支付状态
     * @param openid
     * @param orderNo
     * @return
     */
    public int confirmPayByOpenId(String openid, String orderNo, String serialNo);

    /**
     * 根据用户openid + 订单NO 更新订单支付状态
     * @param userCode
     * @param orderNo
     * @return
     */
    public int confirmPayByUserCodeAndNo(String userCode, String orderNo);

    /**
     * 查询当前用户的订单列表(order_type = 1 有效订单)
     * @param userId 当前用户
     * @param payFlag 付款状态
     * @param day 最近几天
     * @return
     */
    public List<OrderShowVo> selectDefaultOrderShowVoList(Long userId, String payFlag,  Integer day);

    /**
     * 根据订单编号查询主订单详情
     * @param orderNo 订单编号
     * @return
     */
    public CanteenCpOrder selectCpOrderByNo(String orderNo);

    /**
     * 用户发起售后-退货申请
     * order_status=6
     * @param orderId 订单id
     * @param userId  发起人用户id
     * @param reasonId  退货原因id
     * @param mdId  门店id
     * @return
     */
    public int canncelOrderById(Long userId, Long orderId, Integer reasonId, Integer mdId);

//    /**
//     * 拒绝-取消订单
//     * order_status=7：交易关闭（退货审核不通过）11：售后中（退货已入库）
//     * order_status=12：交易关闭（完成退款）
//     * @param orderId 订单id
//     * @param orderStatus  订单状态
//     * @return
//     */
//    public int rejectOrderCancelById(Long userId, Integer orderStatus, Long orderId);
//
//    /**
//     * 批准同意-取消订单
//     * order_status=7：交易关闭（退货审核不通过）11：售后中（退货已入库）
//     * order_status=12：交易关闭（完成退款）
//     * @param orderId 订单id
//     * @param orderStatus  订单状态
//     * @return
//     */
//    public int approvedOrderCancelById(Long userId, Integer orderStatus, Long orderId);

}
